/**
 * @Author: Jiang Zhongxun
 * @Date: 2024-10-07 19:20:25
 * @FilePath: /Socket/practiceProject/src/client/adminOpt.c
 * @Description: 管理员前台操作
 * @Copyright (c) 2024 by 蒋仲勋, All Rights Reserved.
 */
#include "../../include/client/adminOpt.h"
#include "../../include/client/client.h"
#include "../../include/client/menu.h"
#include "../../include/db/dbDefinition.h"
#include "../../include/db/dbOperation.h"
#include "../../include/server/adminSys.h"
#include "../../include/utils/utils.h"

extern int is_login; // 0 表示未登录，1 表示已登录
extern sqlite3 *db;  // 定义在守护进程 daemon.c

/**
 * @description: 管理员客户端通信
 * @param {int} sockfd 套接字
 * @return {*} 成功返回0，失败返回-1
 */
int adminTcpClientCom(int sockfd)
{
// 初始化数据库与数据库表
// 下面一行代码，仅在单独测试时开放，因为已经在创建守护进程的函数中做了调用
#if 1
    db = databaseInit();
#endif
    if (sockfd < 0)
    {
        printf("sockfd is error!\n");
        return -1;
    }
    char buf_admin[64] = {0};
    char adminFlag[] = "admin"; // 业务种类
    char adminOption[20] = {0}; // 业务名称
    // char msgFromServer_admin[128] = {0}; // 接收服务端消息
    // int recvSize_admin;
    // 将处理的业务名称发送给服务器【checked \ select \ upPasswd \ quit】
    printf("请输入业务名称[checked \\ select \\ upPasswd \\ quit]: ");
    scanf("%s", adminOption);
    sprintf(buf_admin, "%s@%s", adminFlag, adminOption);
    // 将业务种类和业务名称，发给服务器处理请求
    send(sockfd, buf_admin, sizeof(buf_admin), 0);
    printf("发送业务名称给服务端, 成功!\n");
    if (0 == strncasecmp(adminOption, "quit", 4))
    {
        printf("退出管理员平台成功!\n");
        is_login = 0;
        return -1;
    }
    // 判断管理员客户端的业务种类
    // 人工查验审核业务
    if (0 == strncasecmp(adminOption, "checked", 7))
    {
        // 调用人工查验审核接口
        manualAudit(db);
    }
    // 查询操作记录业务
    else if (0 == strncasecmp(adminOption, "select", 6))
    {
        // 调用查询操作记录接口
        queryOperationRecord(db);
    }
    // 修改用户密码业务
    else if (0 == strncasecmp(adminOption, "upPasswd", 8))
    {
        // 调用修改用户密码接口
        changeUserPasswd(db);
    }
    return 0;
}
